校赛原题:Mo的面积
学长博客:矩形面积并
题目描述
Mo的老师给了他两个矩形,让他求两个矩形的面积并。Mo很忙没时间解决这种小case,请你帮他解决。

输入
输入两行,每行四个整数 x,y,x1,y1 。(x,y) 是矩形左下角,(x1,y1) 是矩形的右上角. (0≤x,y,x1,y1≤1000)。

输出
输出一个整数表示二个矩形的面积并。

样例
input
0 1 2 3
1 0 3 2
output
7
学长的代码(求两个矩形相交部分的面积)

#include<bits/stdc++.h>
using namespace std;
double a[10];
int main()
{
    double l,r,u,d;
    for(int i=1;i<=8;i++){
        scanf("%lf",&a[i]);
    }
    l=max( min(a[1],a[3]) , min(a[5],a[7]) );
    r=min( max(a[1],a[3]) , max(a[5],a[7]) );

    d=max( min(a[2],a[4]) , min(a[6],a[8]) );
    u=min( max(a[2],a[4]) , max(a[6],a[8]) );

    if( r - l <= 0 || u - d <= 0 ) printf("0.00\n");
    else printf("%.2lf\n",(r-l)*(u-d));
    return 0;
}

校赛原题代码(在学长的代码的基础上稍加改动就行)

#include<bits/stdc++.h>
using namespace std;
int a[10];
int main()
{
    int l,r,u,d,s,s1;
    for(int i=1;i<=8;i++){
        scanf("%d",&a[i]);
    }
    l=max( min(a[1],a[3]) , min(a[5],a[7]) );
    r=min( max(a[1],a[3]) , max(a[5],a[7]) );

    d=max( min(a[2],a[4]) , min(a[6],a[8]) );
    u=min( max(a[2],a[4]) , max(a[6],a[8]) );

    if( r - l <= 0 || u - d <= 0 ) s1=0;
    else s1=(r-l)*(u-d);
    s=(a[4]-a[2])*(a[3]-a[1])+(a[8]-a[6])*(a[7]-a[5]);
    cout<<s-s1<<endl;
    return 0;
}

!!!!!!!!!!一定要记住补题!!!!!!!!!!!!